package com.md.util.es;

import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

/**
 * @author 刘骄阳
 * 2022-03-17 14:26
 */
public class Query {
  SearchSourceBuilder builder;

  public Query() {
    builder = new SearchSourceBuilder();
  }

  /**
   * 返回查询条件
   *
   * @return 查询条件
   */
  public SearchSourceBuilder getBuilder() {
    return builder;
  }

  /**
   * 大于
   *
   * @param column 列
   * @param value  值
   */
  public void lt(final String column, final Object value) {
    builder.query(QueryBuilders.rangeQuery(column).lt(value));
  }

  /**
   * 小于
   *
   * @param column 列
   * @param value  值
   */
  public void gt(final String column, final Object value) {
    builder.query(QueryBuilders.rangeQuery(column).gt(value));
  }

  /**
   * 大于等于
   *
   * @param column 列
   * @param value  值
   */
  public void lte(final String column, final Object value) {
    builder.query(QueryBuilders.rangeQuery(column).lte(value));
  }

  /**
   * 小于等于
   *
   * @param column 列
   * @param value  值
   */
  public void gte(final String column, final Object value) {
    builder.query(QueryBuilders.rangeQuery(column).gte(value));
  }

  /**
   * 根据指定列升序查询
   *
   * @param column 列名
   */
  public void sort(final String column) {
    sortAsc(column);
  }

  /**
   * 根据指定列升序查询
   *
   * @param column 列名
   */
  public void sortAsc(final String column) {
    builder.sort(column, SortOrder.ASC);
  }

  /**
   * 根据指定列降序查询
   *
   * @param column 列名
   */
  public void sortDesc(final String column) {
    builder.sort(column, SortOrder.DESC);
  }

  /**
   * 查询包含指定值的列
   *
   * @param column 列
   * @param value  值
   */
  public void in(final String column, final Object... value) {
    builder.query(QueryBuilders.termsQuery(column, value));
  }

  /**
   * 模糊查询
   *
   * @param column 列
   * @param value  值
   */
  public void like(final String column, final Object value) {
    builder.query(QueryBuilders.matchPhrasePrefixQuery(column, value));
  }

  /**
   * 等值匹配
   *
   * @param column 列
   * @param value  值
   */
  public void eq(final String column, final Object value) {
    builder.query(QueryBuilders.termQuery(column, value));
  }
}
